#include "key.h"
#include "log.h"

#define KEY1 	HAL_GPIO_ReadPin(GPIOA,KEY_1_Pin)
#define KEY2 	HAL_GPIO_ReadPin(GPIOA,KEY_2_Pin)
#define KEY3 	HAL_GPIO_ReadPin(GPIOA,KEY_3_Pin)
#define KEY4 	HAL_GPIO_ReadPin(GPIOA,KEY_4_Pin)

//返回按键值
//0，没有任何按键按下
//1，KEY1按下
//2，KEY2按下
//3，KEY3按下
//4，KEY4按下
//注意此函数有响应优先级,KEY1>KEY2>KEY3>KEY4!!
u8 KEY_Scan1(void)
{	 
	static u8 key_up=1;//按键按松开标志	
	if(key_up&&((KEY1 == 0x00)||(KEY2 == 0x00)||(KEY3 == 0x00)||(KEY4 == 0x00)))
	{
		HAL_Delay(10);//去抖动 
		key_up=0;
		if (KEY1 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY1-");
			return 1;
		}
		if (KEY2 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY2-");
			return 2;
		}
		if (KEY3 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY3-");
			return 3;
		}
		if (KEY4 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY4-");
			return 4;
		}
	}
	else if((KEY1 == 0x01)&&(KEY2 == 0x01)&&(KEY3 == 0x01)&&(KEY4 == 0x01)) key_up=1; 	    

	return 0;// 无按键按下
}

//按键长按
u8 KEY_Scan2(void)
{	 
	if((KEY1 == 0x00)||(KEY2 == 0x00)||(KEY3 == 0x00)||(KEY4 == 0x00))
	{
		HAL_Delay(10);//去抖动 
		if (KEY1 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY1-");
			return 1;
		}
		if (KEY2 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY2-");
			return 2;
		}
		if (KEY3 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY3-");
			return 3;
		}
		if (KEY4 == 0x00)		//按键按下:低电平有效
		{
			LOG_DEBUG("-KEY4-");
			return 4;
		}
	}    

	return 0;// 无按键按下
}	

void delay_us(uint32_t us)
{
	uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);
	while (delay--);
}

